import { drizzle } from 'drizzle-orm/pglite';
import { PGlite } from '@electric-sql/pglite';
import * as schema from './schema';
import dotenv from 'dotenv';
import path from 'path';

dotenv.config();

// Get database URL from environment variables
const postgresUrl = process.env.POSTGRES_URL;

if (!postgresUrl) {
  throw new Error('POSTGRES_URL environment variable is not set');
}

// 初始化 PGlite 客户端
// 如果是 pglite:// URL，提取文件路径部分
const isPGliteUrl = postgresUrl.startsWith('pglite://');
let options = {};

if (isPGliteUrl) {
  // 从 URL 中提取路径部分
  const pathPart = postgresUrl.replace('pglite://', '');
  
  // 如果是 memory，使用内存模式
  if (pathPart === 'memory') {
    options = {}; // 空选项表示内存模式
    console.log('使用内存模式 PGlite');
  } else {
    // 确保路径是绝对路径或正确的相对路径
    let dataDir = pathPart;
    
    // 如果是相对路径且以 ./ 或 ../ 开头，转换为绝对路径
    if (dataDir.startsWith('./') || dataDir.startsWith('../')) {
      dataDir = path.resolve(process.cwd(), dataDir);
    }
    
    console.log('PGlite 数据文件路径:', dataDir);
    options = { dataDir };
  }
} else {
  // 非 PGlite URL，尝试直接连接
  console.warn('非 PGlite URL，可能导致连接问题:', postgresUrl);
}

console.log('PGlite 连接选项:', options);

// 初始化 PGlite 客户端
export const client = new PGlite(options);

// 初始化 Drizzle ORM
export const db = drizzle({ client, schema });
